import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import dts from 'vite-plugin-dts';
// 页面setup设置名称
import VueSetupExtend from 'vite-plugin-vue-setup-extend';
import { libInjectCss } from 'vite-plugin-lib-inject-css';
const path = require('path');

export default defineConfig({
  plugins: [
    vue(),
    VueSetupExtend(),
    libInjectCss(),
    dts({
      entryRoot: '.',
      outDir: ['./dist/types'],
      copyDtsFiles: true,
    }),
  ],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  server: {
    host: true,
    hmr: {
      overlay: true,
      // 解决热更新不同步的问题
      port: 443,
    },
    port: 9999,
    proxy: {
      // [env.VITE_BASE_API]: {
      //   target: env.VITE_BASE_URL,
      //   changeOrigin: true,
      //   rewrite: (path) => path.replace(/^\/api/, ""),
      // },
    },
  },
  build: {
    //minify: false,
    rollupOptions: {
      // 确保外部化处理不想打包进库的依赖
      external: ['vue', 'pinia'],
      output: {
        //打包格式
        format: 'es',
        //让打包目录和我们目录对应
        preserveModules: true,
        //使用命名导出模式，以允许外部工具使用 import 语句从你的库中导入特定的函数、类或变量。
        exports: 'named',
        //配置打包根目录
        dir: './dist/es',
        globals: {
          vue: 'Vue',
          pinia: 'Pinia',
        },
        assetFileNames: (assetInfo) => {
          if (assetInfo.name?.endsWith('.css')) {
            return 'css/[name].[hash].css';
          }
          return 'assets/[name].[hash][extname]';
        },
        chunkFileNames: 'chunks/[name].[hash].js',
        entryFileNames: '[name].es.js',
      },
    },
    lib: {
      entry: path.resolve(__dirname, './index.ts'),
      formats: ['es'], // 格式
    },
  },
});
